
#ifndef _NCURSES_H
#define _NCURSES_H
/**
 * @file ncurses.h
 * @brief Contient les fonctions pour lancer le jeu en mode texte
 * @details liste des fonctions pour le module ncurses
 * @version 1.0
 * @date 2013/05/16
*/
#include <curses.h>
#include <cdk.h>
#include "Jeu.h"

/**
 * @brief boucleNcurses fais appel à toutes les fonctions ncurses pour faire tourner le jeu
 * @param [in-out] Jeu* pointeur sur structure Jeu.
 * @return none
*/
void boucleNcurses(Jeu *);

/**
 * @brief affMenu affiche le menu pour demander le nombre de joueurs
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @return int le nombre de joueurs
*/
int affMenu(CDKSCREEN *);
/**
 * @brief affPlateau2 affiche le plateau en mode texte
 * @return none
*/
void affPlateau2();

/**
 * @brief affCarte affiche une carte tiré dans la pioche.
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @param [in-out] Jeu* pointeur sur la structure jeu.
 * @param [in] const int le numéro du joueur influencé par la carte tiré dans la pioche.
 * @return none
*/
void affCarte(CDKSCREEN *, Jeu *, const int);
/**
 * @brief repQuestion affiche la question propre à la case.
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @param [in-out] Jeu* pointeur sur la structure jeu.
 * @param [in] const int le numéro de la case.
 * @param [in] const int le numéro du joueur en cours.
 * @return none
*/
void repQuestion(CDKSCREEN *, Jeu *, const int, const int);
/**
 * @brief affQuestion fait appel à repQuestion si le joueur n'a pas encore répondu juste à la question, rejoue sinon.
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @param [in-out] Jeu* pointeur sur la structure jeu.
 * @param [in] const int le numéro de la case.
 * @param [in] const int le numéro du joueur en cours.
 * @return none
*/
void affQuestion(CDKSCREEN *, Jeu *, const int, const int);
/**
 * @brief affBonus affiche un bonus spécifique à la case.
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @param [in-out] Jeu* pointeur sur la structure jeu.
 * @param [in] const int le numéro du joueur en cours.
 * @return none
*/
void affBonus(CDKSCREEN *, Jeu *, const int);
/**
 * @brief affBilan affiche le bilan si le joueur tombe la case bilan.
 * @param [in-out] Jeu* pointeur sur la structure jeu.
 * @param [in] const int le numéro du joueur en cours.
 * @return int qui met terme au jeu si le joueur a gagné.
*/
int affBilan(Jeu *, const int);

/**
 * @brief affScore affiche le score des joueurs et fait appel à affPion pour chacun des joueurs.
 * @param [in] Jeu* pointeur sur la structure jeu.
 * @return none.
*/
void affScore(const Jeu *);
/**
 * @brief affPion affiche le pion du joueur, fait appel à retCoordX et retCoordY.
 * @param [in] Jeu* numéro du joueur.
 * @param [in] Jeu* position du joueur.
 * @return none.
*/
void affPion(const int, const int);

/**
 * @brief testDeuxDes test si le joueur possède un bonus "2dés", si oui, il peux l'utiliser.
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @param [in-out] Jeu* pointeur sur la structure jeu.
 * @param [in] const int le numéro du joueur en cours.
 * @return int le dernier dé lancer (le seul si bonus pas activé)
*/
int testDeuxDes(CDKSCREEN *, Jeu *, const int);
/**
 * @brief verifQuitterPartie demande confirmation de quitter le jeu si le joueur appuye sur echap.
 * @param [in-out] CDKSCREEN* pointeur sur l'écran d'affichage.
 * @param [in] const char le caractère entré au clavier.
 * @return int 0 si le joueur confirme, 1 sinon.
*/
int verifQuitterPartie(CDKSCREEN *, const char);

/**
 * @brief retCoordX calcule la position du joueur sur l'axe des abcisses.
 * @param [in] Jeu* numéro de la case concerné.
 * @return int position du joueur sur l'axe des abscisses.
*/
int retCoordX(const int);
/**
 * @brief retCoordY calcule la position du joueur sur l'axe des ordonnées.
 * @param [in] Jeu* numéro de la case concerné.
 * @return int position du joueur sur l'axe des ordonnées.
*/
int retCoordY(const int);

#endif
